====== Persönliche Auswertung für den Teilnehmer ======

Mithilfe der Funktionen ''[[:de:create:functions:value]]'', ''[[:de:create:functions:valueMean]]'' lassen sich die Antworten eines Teilnehmers schon während der Befragung auswerten (s. auch [[points]]). Einige Frage, wie z.B. der [[:de:create:questions:iat]] liefern auch direkt eine Auswertung. Mithilfe von ''[[:de:create:functions:statistic]]'' sind zudem Auswertungen über alle bisherigen Teilnehmer möglich.

**Hinweis:** Diese Anleitung zeigt, wie Feedback innerhalb bzw. am Ende eines Fragebogens angezeigt werden kann. Mithilfe des Zusatzmoduls für die [[:de:results:analyses|automatische Datenauswertung]] ist es auch möglich, ein PDF mit persönlicher Auswertung zum Download anzubieten, vgl. [[:de:results:report]].

===== Darstellung in Textform =====

Als Text lassen sich diese Ergebnisse einfach darstellen. Die Funktion ''[[http://php.net/manual/de/function.sprintf.php|sprintf()]]'' erleichtert das Formatieren von Dezimalzahlen. Mit ''sprintf('%1.2f', $value)'' wird die Dezimalzahl ''$value'' so formatiert, dass zwei Nachkommastellen dargestellt werden.

==== Einzelne Werte (I) ====

Einzelne Werte lassen sich am einfachsten mittels ''[[:de:create:functions:html]]'' ausgeben. Mit einem Punkt (''.'') können Strings (z.B. Fragemente von HTML-Code und die Werte, die anzuzeigen sind) verbunden werden.

<code php>
$value = valueMean('AB01');
html('
  <p>Sie bewerten das aktuelle Fernsehprogramm auf einer Skala von 1 und 10
  durchschnittlich mit '.sprintf('%1.1f', $value).'. Deutschlandweit liegt
  dieser Wert im Mittel bei 6.3</p>
');
</code>

==== Einzelne Werte (II) ====

Eventuell möchte man dem Teilnehmer auch -- abhängig vom Ergebnis -- unterschiedliche Textbausteine anzeigen. Dafür kommt ein [[:de:create:filters|Filter]] zum Einsatz:

<code php>
// Wert/Ergebnis ermitteln
$value = valueMean('AB01_01', 'AB01_05', 'AB01_09');
// z-Transformation
$zValue = ($value - 5) / 2.8;
// Anzeige des richtigen Textbausteins
if ($value < 0) {
  // Keine gültigen Daten in $value - keine Ausgabe
} elseif ($zValue < -2) {
  text('resultExtraSD-2');
} elseif ($zValue < -1) {
  text('resultExtraSD-1');
} elseif ($zValue <= 1) {
  text('resultExtraSD-0');
} elseif ($zValue < 2) {
  text('resultExtraSD+1');
} else {
  text('resultExtraSD+2');
}
</code>


==== Mehrere Werte ====

Mehrere Werte werden häufig tabellarisch dargestellt. Am einfachsten funktioniert dies mit einem Textbaustein und Platzhaltern. Speichern Sie z.B. den folgenden HTML-Code unter **Textbausteine u. Beschriftungen** im neuen Textbaustein //results//.

<code html>
<table cellspacing="5" cellpadding="0" border="0">
  <tr>
    <th>Eigenschaft</th>
    <th>Ihr Wert</th>
    <th>Vergleichswert</th>
  </tr>
  <tr>
    <td>Extraversion</td>
    <td>%val-extra%</td>
    <td>3.2</td>
  </tr>
  <tr>
    <td>Neurotizismus</td>
    <td>%val-neuro%</td>
    <td>2.4</td>
  </tr>
</table>
</code>

Die Platzhalter können anschließend direkt im Befehl ''[[:de:create:functions:text]]'' angegeben werden. Alternativ kann man ''[[:de:create:functions:replace]]'' verwenden.

<code php>
text('result', array(
  '%val-extra%' => valueMean('AB01_01', 'AB01_05', 'AB01_09'),
  '%val-neuro%' => valueMean('AB01_02', 'AB01_06', 'AB01_10')
));
</code>


===== Visuelle Darstellung =====

Für die visuelle Darstellung stehen unterschiedliche Möglichkeiten zur Verfügung.

==== Einzelne Werte ====

Für einzelne Werte (z.B. ein IAT-Ergebnis) bietet sich HTML-Code an, der eine Skala und darauf eine Markierung anzeigt.

{{:de:create:exp.feedback-visual.textelement.png?nolink|Beispiel für die visuelle Darstellung eines einzelnen Werts}}

Speichern Sie den folgenden HTML-Code als neuen Text im Fragenkatalog (im Folgenden wird angenommen, dass er die Kennung "RS01" erhält).

<code html>
<!-- Überschrift für die Abbildung -->
<div class="title" style="text-align: center">%title%</div>

<div style="position: relative">
  <!-- Die Skala liegt im Hintergrund -->
  <div style="margin: 0 auto; width: 400px; height: 25px; background-image:url('ofb://slider.scale.sd-blue400S')">
      <!-- Zur Platzierung der Markierung wird eine Einheit (Bereich 0 bis 1) als Blockelement platziert -->
      <div style="position: absolute; top: -2px; left: 50%; width: 65px; height: 27px">
        <!-- Die eigentliche Markierung wird an der richtigen Stelle eingefügt -->
        <img src="ofb://slider.button.rhomb" alt="" style="position: absolute; left: %zValue100%%; margin-left: -8px" />
      </div>
  </div>
</div>
</code>

Der HTML-Code verwendet zwei Platzhalter: ''%title%'' und ''%zValue100%''. Dieser HTML-Code ist dafür ausgelegt, einen z-Wert zwischen -3 und +3 anzuzeigen. Entsprechend sähe die Verwendung aus wie folgt:

<code php>
// Wert/Ergebnis ermitteln
$value = valueMean('AB01_01', 'AB01_05', 'AB01_09');
// z-Transformation
$zValue = ($value - 5) / 2.8;
// Extremwerte filtern
if ($zValue < -3) {
  $zValue = -3;
}
if ($zValue > 3) {
  $zValue = 3;
}
// Textbaustein verwenden (nur, wenn $value einen gültigen Wert geliefert hat)
if ($value > 0) {
  show('RS01', array(
    '%title%' => 'Extraversion',
    '%zValue100%' => (string)round($zValue * 100)
  ));
}
</code>


==== Mehrere Werte (I) ====

Mit Hilfe der Funktion ''[[:de:create:functions:diagram2]]'' lassen sich ausgewählte Diagramme im Fragebogen platzieren. Zur Verwendung sei auf die Dokumentation der Funktion verwiesen. Eine optimierte Funktion ''chart()'' wird in künftigen Versionen von SoSci Survey zur Verfügung stehen.


==== Mehrere Werte (II) ====

Sofern auf dem Befragungsserver das Plug-In //Highcharts// zur Verfügung steht, können mit der Highcharts-Bibliothek sehr schicke Diagramme im Fragebogen angezeigt werden. Wenn die Kategorie-Beschriftungen in im Array ''$labels'' gespeichert sind, die Ergebnisse im Array ''$ownData'' und Referenzdaten im Array ''$refData'', kann man mit folgendem Textbaustein "chart" (//Darstellung// "HTML_Code") und dem zugehörigen PHP-Code ein Balken-Diagramm anzeigen. Erklärungen und Details sind der [[http://www.highcharts.com/docs|Highcharts Dokumentation]] zu entnehmen.

<code html>
<!-- Container für das Diagramm -->
<div id="chart" style="height: 600px"></div>

<script type="text/javascript" src="../plugins/highcharts/highcharts.js"></script>
<script type="text/javascript">
<!--

$(function () {
    $('#chart').highcharts({
        chart: {
            type: 'bar'
        },
        title: {
            text: null
        },
        xAxis: {
            categories: %labels%,
            title: {
                text: null
            }
        },
        plotOptions: {
            bar: {
                dataLabels: {
                    enabled: true
                }
            }
        },
        legend: {
            layout: 'horizontal',
            align: 'center',
            verticalAlign: 'bottom',
            floating: false,
            borderWidth: 0,
            backgroundColor: ((Highcharts.theme && Highcharts.theme.legendBackgroundColor) || '#FFFFFF'),
            shadow: false
        },
        credits: {
            enabled: false
        },
        series: [{
            name: 'Durchschnitt',
            data: %refData%,
            color: '#BBBBBB',
            dataLabels: {
                enabled: false
            }
        }, {
            name: 'Ihr Wert',
            data: %ownData%,
            color: '#009900',
            dataLabels: {
                enabled: false
            }
        }]
    });

});

// -->
</script>
</code>

<code php>
// Bibliothek jQuery verfügbar machen
option('script', 'jQuery 1.x');
// Textbaustein mit dem HTML-Code für das Chart einbinden
text('chart', array(
  '%labels%' => json_encode($labels),
  '%ownData%' => json_encode($ownData),
  '%refData%' => json_encode($refData)
));
</code>